package common.utils;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import java.util.Set;
import java.util.concurrent.TimeUnit;

/**
 * 如果redis中的数据，是由缓存自动写入的话，就用该工具类 手动根据key获取value
 *
 * @param
 */
public class RedisUtils {
    @Autowired
    public RedisTemplate<String, Object> redisTemplate;


    /**
     * 手动存储
     * 带过期时间
     *
     * @param key
     * @param value
     * @param time
     * @param timeUnit
     */
    public void set(String key, Object value, Long time, TimeUnit timeUnit) {
        redisTemplate.opsForValue().set(key, value, time, timeUnit);
    }

    /**
     * 手动添加  不设置过期时间
     * 默认过期时间一天
     *
     * @param key
     * @param value
     */
    public void set(String key, Object value) {
        redisTemplate.opsForValue().set(key, value, 24, TimeUnit.HOURS);
    }

    /**
     * 只是适用于 redis里面只存了一个对象的情况
     *
     * @param key
     * @return
     */
    public <T> T getPojoFromRedis(String key) {
        return (T) redisTemplate.opsForValue().get(key);
    }

    public String getCheckCode(String key) {
        return (String) redisTemplate.opsForValue().get(key);
    }

    /**
     * 判断数据库是否有key
     *
     * @param key
     * @return
     */
    public boolean hasKey(String key) {
        return redisTemplate.hasKey(key);
    }

    /**
     * 浏览量加一
     *
     * @param key
     */
    public void increaVisits(String key) {
        redisTemplate.opsForValue().increment(key, 1);
    }

    /**
     * 删缓存
     *
     * @param key
     */
    public void deleteKey(String key) {
        redisTemplate.delete(key);
    }

    /**
     * 得到指定key前缀下的所有key
     *
     * @param prefix
     * @return *
     * message:123123:*
     */
    public Set<String> getKeys(String prefix) {
        return redisTemplate.keys(prefix);
    }

}
